package com.iweb.utitls;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * @Author 杨芯叶
 * @Create 2025-04-03-8:36
 * @Message 加密和解密工具类
 **/
public class MD5Util {
    // 固定阈值
    private static final String SALT = "MySaltValue";
    /**
     * 对输入字符串进行MD5加密处理
     * @param input 待加密的字符串
     * @return 加密后的MD5哈希值作为十六进制字符串
     */
    public static String encrypt(String input) {
        try {
            // 创建MessageDigest实例并指定算法为MD5
            MessageDigest md = MessageDigest.getInstance("MD5");
            // 将输入字符串与盐值拼接
            String inputWithSalt = input + SALT;
            // 将字符串转换为字节数组并进行MD5哈希
            byte[] messageDigest = md.digest(inputWithSalt.getBytes());
            // 将字节数组转换为十六进制字符串
            StringBuilder hexString = new StringBuilder();
            for (byte b : messageDigest) {
                String hex = Integer.toHexString(0xff & b);
                if (hex.length() == 1) {
                    hexString.append('0');
                }
                hexString.append(hex);
            }
            return hexString.toString();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
            return null;
        }
    }
    /**
     * 检查密码是否已经是加密过的
     * @param password 待检查的密码
     * @return 如果密码已经是加密过的，则返回 true；否则返回 false
     */
    public static boolean checkPassword(String password) {
        // 长度检查：MD5的十六进制字符串长度应该是32
        if (password == null || password.length() != 32) {
            return false;
        }
        // 正则表达式检查：只允许包含十六进制字符
        String hexPattern = "^[a-fA-F0-9]{32}$";
        return password.matches(hexPattern);
    }
}
